perm filename EN.LST[11,HE] blob sn#690547 filedate 1982-12-13 generic text, type T, neo UTF8
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 1


      1					; COPYRIGHT XEROX CORPORATION 1979
      2						.TITLE	ENDRV
      3						.DSABL	GBL
      4						.MCALL	IOERR$
U     5						.MCALL	INTSV$
      6						.GLOBL	$FORK
      7						.GLOBL	$GTPKT
      8						.GLOBL	$GTWRD
      9						.GLOBL	$IODON
     10						.GLOBL	$PTWRD
     11						.GLOBL	IO.RLB
     12	000000					IOERR$
U    13	000000	000000 				DEVDF$
U    14	000002	000000 				HWDDF$
U    15	000004	000000 				PKTDF$
U    16	000006	000000 				TCBDF$
     17
     18						.LIST	MEB
     19
     20		000030 			U.CNT=30                ;FROM DEVDF$,HWDDF$,PKTDF$,TCBDF$
     21		000012 			I.FCN=12                ; "
     22		000024 			I.PRM=24                ; "
     23		000012 			S.CSR=12                ; "
     24		000014 			U.CW3=14                ; "
     25		000020 			U.SCB=20                ; "
     26
     27		000000 			LD$EN=0			;REQUIRED FOR LOADABLE DRIVERS
     28
     29		177774 			ETHOWC=-4		;ETHERNET OUTPUT WORD COUNT
     30		177776 			ETHOBL=-2		;ETHERNET OUTPUT BUFFER LOCATION
     31		000000 			ETHOCS=0		;ETHERNET OUTPUT CONTROL & STATUS
     32		000002 			ETHOSD=2		;ETHERNET OUTPUT START DELAY
     33		177774 			ETHIWC=-4		;ETHERNET INPUT WORD COUNT
     34		177776 			ETHIBL=-2		;ETHERNET INPUT BUFFER LOCATION
     35		000000 			ETHICS=0		;ETHERNET INPUT CONTROL & STATUS
     36		000002 			ETHRDA=2		;ETHERNET READ DEVICE ADDRESS
     37					;
     38	000010				START:				;MUST BE RELOCATABLE 0
     39	000010				TEMP:	.BLKW	1		;SAVED PS
     40	000012				CNTBL:	.BLKW	2		;ADDRESSES OF UCB'S
     41					;
     42	000016				$ENTBL::
     43	000016	000026'				.WORD	ENINI		;INITIATOR ENTRY POINT
     44	000020	000264'				.WORD	ENCAN		;CANCEL I/O ENTRY POINT
     45	000022	000306'				.WORD	ENTIM		;TIMEOUT ENTRY POINT
     46	000024	000310'				.WORD	ENPWF		;POWER FAIL ENTRY POINT
     47					;
     48					;INITIATE I/O
     49					;
     50	000026				ENINI:
     51	000026	004767 	000000G			CALL	$GTPKT			;GET AN I/O PACKET TO PROCESS
     52	000032	103526 				BCS	ENPWF
     53	000034	010563 	000012'			MOV	R5,CNTBL(R3)		;SAVE UCB POINTER FOR INTERRUPT
     54	000040	016402 	000012 			MOV	S.CSR(R4),R2		;GET DEVICE ADDRESS
     55	000044	026127 	000012 	003000 		CMP	I.FCN(R1),#3000		;GET HOST ADDRESS?
     56	000052	001405 				BEQ	HOST			;YES
     57	000054	026127 	000012 	000000G		CMP	I.FCN(R1),#IO.RLB	;READ?
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 1-1


     58	000062	001434 				BEQ	IN			;YES
     59	000064	000450 				BR	OUT			;WRITE
     60					;
     61					;GET AND RETURN HOST ADDRESS
     62					;
     63	000066				HOST:
     64	000066	005062 	000000 			CLR	ETHICS(R2)		;RESET INPUT BOARD
     65	000072	005062 	177770 			CLR	-10(R2)			;RESET OUTPUT BOARD
     66	000076	013701 	172352 			MOV	@#172352,R1		;PAR 5
     67	000102	072127 	000006 			ASH	#6,R1
     68	000106	010167 	000430 			MOV	R1,INADD
     69	000112	066767 	000422 	000422 		ADD	BUFIN,INADD		;PA OF INBUF
     70	000120	010167 	001500 			MOV	R1,OUTADD
     71	000124	066767 	001472 	001472 		ADD	BUFOUT,OUTADD		;PA OF OUTBUF
     72	000132	016201 	000002 			MOV	ETHRDA(R2),R1		;HOST ADDR
     73	000136	105101 				COMB	R1			;I/O STATUS WORD 2
     74	000140	012700 	000001 			MOV	#IS.SUC,R0		;I/O STATUS WORD 1
     75	000144	005002 				CLR	R2			;ERROR LOGGING COUNTS
     76	000146	004767 	000000G			CALL	$IODON
     77	000152	000725 				BR	ENINI
     78					;
     79					;START INPUT
     80					;
     81	000154				IN:
     82	000154	016504 	000030 			MOV	U.CNT(R5),R4		;SET MAX BYTE COUNT
     83	000160	006204 				ASR	R4			;MAKE INTO WORD COUNT
     84	000162	005404 				NEG	R4			;MAKE NEGATIVE
     85	000164	010462 	177774 			MOV	R4,ETHIWC(R2)		;SET NEGATIVE WORD COUNT
     86	000170	016762 	000346 	177776 		MOV	INADD,ETHIBL(R2)	;SET BUFFER ADDRESS
     87	000176	012762 	000101 	000000 		MOV	#101,ETHICS(R2)		;START INPUT
     88	000204	000710 				BR	ENINI
     89					;
     90					;START OUTPUT
     91					;
     92	000206				OUT:
     93	000206	016504 	000030 			MOV	U.CNT(R5),R4		;SET OUTPUT BYTE COUNT
     94	000212	006204 				ASR	R4			;MAKE INTO WORD COUNT
     95	000214	010403 				MOV	R4,R3
     96	000216	005404 				NEG	R4
     97	000220	010462 	177774 			MOV	R4,ETHOWC(R2)		;SET NEGATIVE WORD COUNT
     98	000224	012704 	001626'			MOV	#OUTBUF,R4
     99	000230				OUT1:
    100	000230	004767 	000000G			CALL	$GTWRD			;GET WORD FROM CALLER
    101	000234	012624 				MOV	(SP)+,(R4)+		;PUT IN OUTPUT BUFFER
    102	000236	077304 				SOB	R3,OUT1			;REPEAT UNTIL DONE
    103	000240	016762 	001360 	177776 		MOV	OUTADD,ETHOBL(R2)	;SET BUFFER ADDRESS
    104	000246	116162 	000032 	000002 		MOVB	I.PRM+6(R1),ETHOSD(R2)	;SET OUTPUT START DELAY
    105	000254	012762 	000101 	000000 		MOV	#101,ETHOCS(R2)		;START OUTPUT
    106	000262	000661 				BR	ENINI
    107					;
    108					;CANCEL I/O
    109					;
    110	000264				ENCAN:
    111	000264	005074 	000012 			CLR	@S.CSR(R4)		;RESET ETHERNET BOARD
    112	000270	012700 	177761 			MOV	#IE.ABO,R0		;SET ABORT CODE
    113	000274	005001 				CLR	R1			;BYTE CNT = 0
    114	000276	005002 				CLR	R2
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 1-2


    115	000300	004767 	000000G			CALL	$IODON			;I/O COMPLETED
    116	000304	000207 				RETURN
    117					;
    118					;TIMEOUT ENTRY
    119					;
    120	000306				ENTIM:
    121	000306	000207 				RETURN
    122					;
    123					;POWER-FAIL ENTRY
    124					;
    125	000310				ENPWF:
    126	000310	000207 				RETURN
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 2


    128					;
    129					;INPUT/OUTPUT COMPLETE INTERRUPT
    130					;
    131	000312				$ENINT::
    132	000312	000174 	000316'			JMP	@TABLE(R4)		;EXECUTE CORRECT ROUTINE
    133	000316				TABLE:
    134	000316	000446'				.WORD	$ENOUT
    135	000320	000322'				.WORD	$ENINP
    136					;
    137					;INPUT INTERRUPT
    138					;
    139	000322				$ENINP::
OQ  140	000322					INTSV$	EN,PR5,2		;R5 = UCB ADDRESS
    141	000322	016504 	000020 			MOV	U.SCB(R5),R4		;R4 = SCB ADDRESS
    142	000326	017465 	000012 	000014 		MOV	@S.CSR(R4),U.CW3(R5)	;INPUT CONTROL & STATUS
    143	000334	004767 	000000G			CALL	$FORK
    144	000340	016504 	000020 			MOV	U.SCB(R5),R4		;R4 = SCB ADDRESS
    145	000344	016402 	000012 			MOV	S.CSR(R4),R2
    146	000350	005062 	000000 			CLR	ETHICS(R2)		;RESET INPUT BOARD
    147	000354	005765 	000014 			TST	U.CW3(R5)
    148	000360	100004 				BPL	ENINP1
    149	000362	012700 	177774 			MOV	#IE.VER,R0		;UNSUCCESSFUL COMPLETION
    150	000366	005001 				CLR	R1			;INPUT BYTE COUNT
    151	000370	000421 				BR	ENINP2
    152	000372				ENINP1:
    153	000372	012700 	000001 			MOV	#IS.SUC,R0		;SUCCESSFUL COMPLETION
    154	000376	016201 	177774 			MOV	ETHIWC(R2),R1		;INPUT WORD COUNT (NEG)
    155	000402	052701 	176000 			BIS	#176000,R1		;SIGN EXTEND
    156	000406	006301 				ASL	R1			;CONVERT TO BYTES
    157	000410	066501 	000030 			ADD	U.CNT(R5),R1		;R1 = PACKET LENGTH (BYTES)
    158	000414	010103 				MOV	R1,R3
    159	000416	006203 				ASR	R3			;R3 = PACKET LENGTH (WORDS)
    160	000420	012704 	000544'			MOV	#INBUF,R4
    161	000424				INLOOP:
    162	000424	012446 				MOV	(R4)+,-(SP)
    163	000426	004767 	000000G			CALL	$PTWRD			;PASS WORD TO CALLER
    164	000432	077304 				SOB	R3,INLOOP		;REPEAT UNTIL DONE
    165	000434				ENINP2:
    166	000434	005002 				CLR	R2			;ERROR LOGGING COUNTS
    167	000436	004767 	000000G			CALL	$IODON
    168	000442	000167 	177360 			JMP	ENINI
    169					;
    170					;OUTPUT INTERRUPT
    171					;
    172	000446				$ENOUT::
OQ  173	000446					INTSV$	EN,PR5,2		;R5 = UCB ADDRESS
    174	000446	016504 	000020 			MOV	U.SCB(R5),R4		;R4 = SCB ADDRESS
    175	000452	017465 	000012 	000014 		MOV	@S.CSR(R4),U.CW3(R5)	;OUTPUT CONTROL & STATUS
    176	000460	004767 	000000G			CALL	$FORK
    177	000464	016504 	000020 			MOV	U.SCB(R5),R4		;R4 = SCB ADDRESS
    178	000470	016402 	000012 			MOV	S.CSR(R4),R2
    179	000474	005062 	000000 			CLR	ETHOCS(R2)		;RESET OUTPUT BOARD
    180	000500	005765 	000014 			TST	U.CW3(R5)
    181	000504	100004 				BPL	ENOUT1
    182	000506	012700 	177774 			MOV	#IE.VER,R0		;UNSUCCESSFUL COMPLETION
    183	000512	005001 				CLR	R1			;OUTPUT BYTE COUNT
    184	000514	000404 				BR	ENOUT2
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 2-1


    185	000516				ENOUT1:
    186	000516	012700 	000001 			MOV	#IS.SUC,R0		;SUCCESSFUL COMPLETION
    187	000522	016501 	000030 			MOV	U.CNT(R5),R1		;OUTPUT BYTE COUNT
    188	000526				ENOUT2:
    189	000526	005002 				CLR	R2			;ERROR LOGGING COUNTS
    190	000530	004767 	000000G			CALL	$IODON
    191	000534	000167 	177266 			JMP	ENINI
    192					;
    193					;I/O BUFFERS
    194					;
    195	000540	000534 			BUFIN:	.WORD	INBUF-START		;OFFSET IN PARTITION
    196	000542				INADD:	.BLKW	1			;PA OF INBUF
    197	000544				INBUF:	.BLKW	279.
    198					;
    199	001622	001616 			BUFOUT:	.WORD	OUTBUF-START		;OFFSET IN PARTITION
    200	001624				OUTADD:	.BLKW	1			;PA OF OUTBUF
    201	001626				OUTBUF:	.BLKW	279.
    202		000001 				.END
ENDRV	MACRO M1113  13-DEC-82 14:16  PAGE 2-2
SYMBOL TABLE

BUFIN   000540R  	IE.BHD= 177700   	IE.IFU= 177747   	IE.RNM= 177715   	IS.SUC= 000001
BUFOUT  001622R  	IE.BLB= 177672   	IE.ILL= 177726   	IE.RSU= 177757   	IS.TAB= 004401
CNTBL   000012R  	IE.BLK= 177754   	IE.ISQ= 177703   	IE.SNC= 177735   	IS.TMO= 000002
DEVDF$= ******   	IE.BNM= 177712   	IE.LCK= 177745   	IE.SPC= 177772   	IS.TNC= 000002
ENCAN   000264R  	IE.BTF= 177664   	IE.MOD= 177753   	IE.SQC= 177734   	I.FCN = 000012
ENINI   000026R  	IE.BTP= 177725   	IE.NBF= 177731   	IE.SRE= 177762   	I.PRM = 000024
ENINP1  000372R  	IE.BVR= 177701   	IE.NBK= 177727   	IE.STK= 177706   	LD$EN = 000000
ENINP2  000434R  	IE.BYT= 177755   	IE.NDR= 177670   	IE.TMM= 177671   	OUT     000206R
ENOUT1  000516R  	IE.CKS= 177742   	IE.NFI= 177704   	IE.TMO= 177666   	OUTADD  001624R
ENOUT2  000526R  	IE.CLO= 177732   	IE.NFW= 177673   	IE.ULK= 177653   	OUTBUF  001626R
ENPWF   000310R  	IE.CNR= 177667   	IE.NLK= 177661   	IE.VER= 177774   	OUT1    000230R
ENTIM   000306R  	IE.CON= 177752   	IE.NLN= 177733   	IE.WAC= 177743   	PKTDF$= ******
ETHIBL= 177776   	IE.DAA= 177770   	IE.NNC= 177663   	IE.WAT= 177741   	START   000010R
ETHICS= 000000   	IE.DAO= 177763   	IE.NNL= 177662   	IE.WCK= 177652   	S.CSR = 000012
ETHIWC= 177774   	IE.DFU= 177750   	IE.NNN= 177674   	IE.WER= 177737   	TABLE   000316R
ETHOBL= 177776   	IE.DNA= 177771   	IE.NOD= 177751   	IE.WLK= 177764   	TCBDF$= ******
ETHOCS= 000000   	IE.DNR= 177775   	IE.NSF= 177746   	IE.2DV= 177720   	TEMP    000010R
ETHOSD= 000002   	IE.DUN= 177767   	IE.NST= 177660   	IN      000154R  	U.CNT = 000030
ETHOWC= 177774   	IE.DUP= 177707   	IE.NTR= 177651   	INADD   000542R  	U.CW3 = 000014
ETHRDA= 000002   	IE.EOF= 177766   	IE.OFL= 177677   	INBUF   000544R  	U.SCB = 000020
HOST    000066R  	IE.EOT= 177702   	IE.ONL= 177675   	INLOOP  000424R  	$ENINP  000322RG
HWDDF$= ******   	IE.EOV= 177765   	IE.ONP= 177773   	IO.RLB= ****** G 	$ENINT  000312RG
IE.ABO= 177761   	IE.EXP= 177665   	IE.OVR= 177756   	IS.BV = 000005   	$ENOUT  000446RG
IE.ALC= 177654   	IE.FEX= 177717   	IE.PES= 177655   	IS.CC = 001401   	$ENTBL  000016RG
IE.ALN= 177736   	IE.FHE= 177705   	IE.PRI= 177760   	IS.CR = 006401   	$FORK = ****** G
IE.AST= 177660   	IE.FLG= 177647   	IE.RAC= 177724   	IS.EOT= 002001   	$GTPKT= ****** G
IE.BAD= 177777   	IE.FLN= 177657   	IE.RAT= 177723   	IS.ESC= 015401   	$GTWRD= ****** G
IE.BBE= 177710   	IE.FOP= 177713   	IE.RBG= 177730   	IS.ESQ= 115401   	$IODON= ****** G
IE.BCC= 177676   	IE.HFU= 177744   	IE.RCN= 177722   	IS.PES= 100001   	$PTWRD= ****** G
IE.BDI= 177714   	IE.ICE= 177721   	IE.REJ= 177650   	IS.PND= 000000   	$$MSG = 000000
IE.BDR= 177716   	IE.IES= 177656   	IE.RER= 177740   	IS.RDD= 000002   	...GBL= 000000
IE.BDV= 177711   	IE.IFC= 177776

. ABS.	000000	   000
      	002704	   001
ERRORS DETECTED:  7

VIRTUAL MEMORY USED:  2319 WORDS  ( 10 PAGES)
DYNAMIC MEMORY:  20502 WORDS  ( 78 PAGES)
ELAPSED TIME:  00:00:15
,EN=ENDRV.RSX